def max_subarray_sum(nums):
    if not nums:  # 如果数组是空的，返回 0
        return 0
    max_sum = current_sum = nums[0]  # 初始时，最大和和当前和都设为数组第一个数
    for num in nums[1:]:  # 从数组第二个数开始遍历
        current_sum = max(num, current_sum + num)  # 选择当前数，或者当前数加上之前的和
        max_sum = max(max_sum, current_sum)  # 更新最大和
    return max_sum

# 测试例子
test1 = [1, -2, 3, 5, -1]
print("第一个数组的最大子数组和：", max_subarray_sum(test1))

test2 = [1, -2, 3, -8, 5, 1]
print("第二个数组的最大子数组和：", max_subarray_sum(test2))

test3 = [1, -2, 3, -2, 5, 1]
print("第三个数组的最大子数组和：", max_subarray_sum(test3))